# coding: UTF-8
# @Date    ：2024/10/15 16:41 
# @File    : log_config.py
# :Author:  fum
from typing import Optional

from pydantic import Field
from pydantic_settings import BaseSettings


class LoggingConfig(BaseSettings):
    """
    日志配置
    %(asctime)s:
    含义: 记录日志的时间戳，格式为 YYYY-MM-DD HH:MM:SS。
    示例: 2023-10-01 12:34:56
    %(msecs)03d:
    含义: 记录日志的时间戳中的毫秒部分，格式为三位数。
    示例: .123
    组合示例: 2023-10-01 12:34:56.123
    %(levelname)s:
    含义: 日志级别，如 DEBUG, INFO, WARNING, ERROR, CRITICAL。
    示例: INFO
    [%(threadName)s]:
    含义: 记录日志的线程名称。
    示例: [MainThread]
    [%(filename)s:%(lineno)d]:
    含义: 记录日志的文件名和行号。
    示例: [example.py:42]
    - %(message)s:
    含义: 实际的日志消息。
    示例: - 这是一条日志消息。
    """
    MAX_BYTES: int = Field(
        10 * 1024 * 1024,
        description="单个日志文件的最大大小（字节），超过此大小后进行滚动。",
    )

    BACKUP_COUNT: int = Field(
        5,
        description="保留的备份日志文件数量，默认为 10。",
    )

    LOG_LEVEL: str = Field(
        description="日志输出级别，默认为 INFO。建议生产环境设置为 ERROR。",
        default="INFO",
    )

    LOG_DIR: Optional[str] = Field(
        description="日志输出目录路径",
        default=None,
    )

    LOG_FORMAT: str = Field(
        description="日志格式",
        default="%(asctime)s.%(msecs)03d %(levelname)s [%(threadName)s] [%(filename)s:%(lineno)d] - %(message)s",
    )

    LOG_DATEFORMAT: Optional[str] = Field(
        description="日志日期格式",
        default="%Y-%m-%d %H:%M:%S",
    )

    LOG_TZ: Optional[str] = Field(
        description="指定日志时区，例如: Asia/Shanghai",
        default="Asia/Shanghai",
    )
